package com.jdj.framework.dao.mybatis.entity;

import java.lang.reflect.Method;

/**
 * 实体属性描述类（实体属性包括了：属性字段、set方法、get方法、其它方法）
 *
 * @author caijinbang
 * @date 2019-04-14 12:54
 */
public class EntityPropertyDescriptor {
    private String columnName;

    private String fieldName;

    private String javaType;

    private String jdbcType;

    private boolean isPrimaryKey = false;

    private boolean isVersion = false;

    private boolean isTransient = false;

    private Method setMethod = null;

    private Method getMethod = null;

    /**
     * 非属性字段set、get方法，的其它方法
     */
    private Method otherMethod = null;

    public EntityPropertyDescriptor() {
    }

    public EntityPropertyDescriptor(String fieldName) {
        this.fieldName = fieldName;
    }

    public EntityPropertyDescriptor(String fieldName, Method setMethod, Method getMethod) {
        this.fieldName = fieldName;
        this.setMethod = setMethod;
        this.getMethod = getMethod;
    }

    /**
     * 字段列名
     * @return
     */
    public String getColumnName() {
        return columnName;
    }

    /**
     * 字段列名
     * @param columnName
     */
    public void setColumnName(String columnName) {
        this.columnName = columnName;
    }

    /**
     * 字段列类型
     * @return
     */
    public String getJdbcType() {
        return jdbcType;
    }

    /**
     * 字段列类型 
     * @param jdbcType
     */
    public void setJdbcType(String jdbcType) {
        this.jdbcType = jdbcType;
    }

    /**
     * java字段名
     * @return
     */
    public String getFieldName() {
        return fieldName;
    }

    /**
     * java字段名
     * @param fieldName
     */
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }

    /**
     * java字段类型
     * @return
     */
    public String getJavaType() {
        return javaType;
    }

    /**
     * java字段类型
     * @param javaType
     */
    public void setJavaType(String javaType) {
        this.javaType = javaType;
    }

    /**
     * 是否为主键字段
     * @return
     */
    public boolean isPrimaryKey() {
        return isPrimaryKey;
    }

    /**
     * 是否为主键字段
     * @param isPrimaryKey
     */
    public void setPrimaryKey(boolean isPrimaryKey) {
        this.isPrimaryKey = isPrimaryKey;
    }

    /**
     * 是否为版本字段
     * @return
     */
    public boolean isVersion() {
        return isVersion;
    }

    /**
     * 是否为版本字段
     * @param isVersion
     */
    public void setVersion(boolean isVersion) {
        this.isVersion = isVersion;
    }

    /**
     * 是否为非持久化（瞬时）字段
     * @return
     */
    public boolean isTransient() {
        return isTransient;
    }

    /**
     * 是否为非持久化（瞬时）字段
     * @param isTransient
     */
    public void setTransient(boolean isTransient) {
        this.isTransient = isTransient;
    }

    /**
     * 字段的set方法
     * @return
     */
    public Method getSetMethod() {
        return setMethod;
    }

    /**
     * 字段set方法
     * @param setMethod
     */
    public void setSetMethod(Method setMethod) {
        this.setMethod = setMethod;
    }

    /**
     * 字段get方法
     * @return
     */
    public Method getGetMethod() {
        return getMethod;
    }

    /**
     * 字段get方法
     * @param getMethod
     */
    public void setGetMethod(Method getMethod) {
        this.getMethod = getMethod;
    }

    /**
     * 非属性字段set、get方法，的其它方法
     */
    public Method getOtherMethod() {
        return otherMethod;
    }

    /**
     * 非属性字段set、get方法，的其它方法
     * @param otherMethod
     */
    public void setOtherMethod(Method otherMethod) {
        this.otherMethod = otherMethod;
    }
}
